package precRev;

import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.ListModel;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;

import org.jfree.ui.RefineryUtilities;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;

/**
 * This code was edited or generated using CloudGarden's Jigloo SWT/Swing GUI
 * Builder, which is free for non-commercial use. If Jigloo is being used
 * commercially (ie, by a corporation, company or business for any purpose
 * whatever) then you should purchase a license for each developer using Jigloo.
 * Please visit www.cloudgarden.com for details. Use of Jigloo implies
 * acceptance of these licensing terms. A COMMERCIAL LICENSE HAS NOT BEEN
 * PURCHASED FOR THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED LEGALLY FOR
 * ANY CORPORATE OR COMMERCIAL PURPOSE.
 */

public class InterfaceUsuario extends javax.swing.JDialog
{

	private static final long serialVersionUID = 1L;

	// Componentes do JDialog
	private JSeparator separador;
	private JButton bt_novaConsulta;
	private JButton bt_remover;
	private JButton bt_graficoDoSistema;
	private JButton bt_gerarGrafico;
	private JList lista1;
	private JLabel texto1;

	// Consultas ativas do usuário
	ArrayList<Consulta> consultasAtivas = new ArrayList<Consulta>();

	// Main
	public static void main(String[] args)
	{

		SwingUtilities.invokeLater(new Runnable()
		{
			public void run()
			{

				JFrame frame = new JFrame();
				InterfaceUsuario inst = new InterfaceUsuario(frame);
				inst.setVisible(true);
				
			}
		});

	}

	// Construtor
	public InterfaceUsuario(JFrame frame)
	{
		super(frame);
		initGUI();
	}

	private JButton getBtGraficoDoSistema()
	{
		
		if(this.bt_graficoDoSistema == null)
		{
			bt_graficoDoSistema = new JButton();
			getContentPane().add(bt_graficoDoSistema,new AnchorConstraint(753,958,898,348,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
			bt_graficoDoSistema.setText("Gráfico do sistema");
			bt_graficoDoSistema.setPreferredSize(new java.awt.Dimension(169,22));
			bt_graficoDoSistema.addMouseListener(new MouseAdapter()
			{
				public void mouseClicked(MouseEvent evt)
				{
					botao4MouseClicked(evt);
				}
			});
		}

		return this.bt_graficoDoSistema;
		
	}
	
	private JButton getBtGerarGrafico()
	{
		if(this.bt_gerarGrafico == null)
		{
			bt_gerarGrafico = new JButton();
			bt_gerarGrafico.setText("Gerar gráfico");
			bt_gerarGrafico.setPreferredSize(new java.awt.Dimension(169,18));
			bt_gerarGrafico.addMouseListener(new MouseAdapter()			
			{
				public void mouseClicked(MouseEvent evt)
				{
					gerarGrafico(evt);
				}
			});
			
			
		}
		
		return this.bt_gerarGrafico;
		
	}
	
	private JButton getBtRemover()
	{
		if(this.bt_remover == null)
		{
			bt_remover = new JButton();
			getContentPane().add(bt_remover,new AnchorConstraint(444,958,562,348,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
			bt_remover.setText("Remover");
			bt_remover.setPreferredSize(new java.awt.Dimension(169,18));
			bt_remover.addMouseListener(new MouseAdapter()
			{
				public void mouseClicked(MouseEvent evt)
				{
					botao2MouseClicked(evt);
				}
			});
		}
		
		return this.bt_remover;
	}

	private JButton getBtNovaConsulta()
	{
		if(this.bt_novaConsulta == null)
		{
			bt_novaConsulta = new JButton();
			bt_novaConsulta.setText("Criar nova consulta");
			bt_novaConsulta.setPreferredSize(new java.awt.Dimension(155,19));
			bt_novaConsulta.addMouseListener(new MouseAdapter()
			{
				public void mouseClicked(MouseEvent evt)
				{
					novaConsulta(evt);
				}
			});
			
			getContentPane().add(bt_novaConsulta,new AnchorConstraint(42,824,167,265,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
		}
		
		return this.bt_novaConsulta;
	}
	
	// Metodo gerado pelo Jigloo, de iniciação do GUI
	private void initGUI()
	{
		try
		{
			AnchorLayout layout = new AnchorLayout();
			getContentPane().setLayout(layout);
			this.setTitle("Trabalho 1 - LBD 2008/1");
			
			this.bt_graficoDoSistema = this.getBtGraficoDoSistema();
			this.bt_gerarGrafico = this.getBtGerarGrafico();
			this.bt_remover = this.getBtRemover();
			this.bt_novaConsulta = this.getBtNovaConsulta();		

			{
				ListModel lista1Model = new DefaultComboBoxModel(new String[] { "" }); // array  strings da JList
				lista1 = new JList();
				getContentPane().add(lista1,new AnchorConstraint(444,326,917,27,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
				lista1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
				lista1.setModel(lista1Model);
				lista1.setPreferredSize(new java.awt.Dimension(83,72));
			}
			
			{
				texto1 = new JLabel();
				getContentPane().add(texto1,new AnchorConstraint(325,471,417,16,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
				texto1.setText("Consultas salvas: ");
				texto1.setPreferredSize(new java.awt.Dimension(126,14));
			}
			
			{
				separador = new JSeparator();
				getContentPane().add(separador,new AnchorConstraint(207,954,246,45,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL,AnchorConstraint.ANCHOR_REL));
				separador.setPreferredSize(new java.awt.Dimension(252,6));
			}
			
			Dimension tela = Toolkit.getDefaultToolkit().getScreenSize();

			this.setSize(285,186);
			this.setLocation((tela.width - this.getSize().width) / 2,(tela.height - this.getSize().height) / 2);
			this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
			
		} catch (Exception e)
		{
			e.printStackTrace();
		}
	}

	// Método que atualiza a JList quando uma consulta é adicionada ou removida
	private void atualizaLista(JList lista)
	{

		String[] nomesConsultas = new String[consultasAtivas.size()];
		for (int x = 0; x < consultasAtivas.size(); x++)
		{
			nomesConsultas[x] = consultasAtivas.get(x).getNome();
		}

		ListModel lista1Model = new DefaultComboBoxModel(nomesConsultas); // array
																			// de
																			// strings
																			// da
																			// JList
		lista1.setModel(lista1Model);
	}

	// Criar nova consulta
	private void novaConsulta(MouseEvent evt)
	{

		String nome;
		String[] respostas, relevantes;

		nome = JOptionPane.showInputDialog("Digite o nome da consulta:");

		if (nome == null || nome.equals(""))
		{
			JOptionPane.showMessageDialog(null,"Você deve dar um nome à consulta","ERRO",JOptionPane.WARNING_MESSAGE);
		}
		else
		{
			String respTemp = JOptionPane.showInputDialog("Digite o vetor resposta (valores separados por vírgula, ex: 1,2,3,4)");
			if (respTemp == null || respTemp.equals(""))
			{
				JOptionPane.showMessageDialog(null,"Você deve dar fornecer o vetor resposta","ERRO",JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				String relTemp = JOptionPane.showInputDialog("Digite o conjunto de docs relevantes (valores separados por vírgula, ex: 1,2,3,4)");
				
				if (relTemp == null || relTemp.equals(""))
				{
					JOptionPane.showMessageDialog(null,"Você deve dar fornecer o conjunto de docs relevantes","ERRO",JOptionPane.WARNING_MESSAGE);
				}
				else
				{
					respostas = respTemp.split(",");
					relevantes = relTemp.split(",");

					Consulta c = new Consulta(nome,respostas,relevantes);
					consultasAtivas.add(c);

					// Atualiza JList
					atualizaLista(lista1);
				}
			}
		}
	}

	// Remover Consulta
	private void botao2MouseClicked(MouseEvent evt)
	{

		int selecionado = lista1.getSelectedIndex();

		if (selecionado != -1)
		{ // H� uma consulta selecionada

			String[] opcoes = { "Sim", "Não" };
			int o = JOptionPane.showOptionDialog(null,"Tem certeza que deseja remover essa consulta?","Confirmação",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opcoes,opcoes[0]);

			if (o == JOptionPane.YES_OPTION)
			{
				consultasAtivas.remove(selecionado);
				atualizaLista(lista1);
			}

		}
		else
		{
			JOptionPane.showMessageDialog(null,"Você deve selecionar uma consulta","ERRO",JOptionPane.WARNING_MESSAGE);
		}
	}

	private void gerarGrafico(MouseEvent evt)
	{

		int selecionado = lista1.getSelectedIndex();

		if (selecionado != -1)
		{ // Há uma consulta selecionada

			Consulta c = consultasAtivas.get(selecionado); // recupera a consulta do ArrayList

			final Grafico grafico = new Grafico(c);
			grafico.pack();
			RefineryUtilities.centerFrameOnScreen(grafico);
			grafico.setVisible(true);

		}
		else
		{
			JOptionPane.showMessageDialog(null,"Você deve selecionar uma consulta","ERRO",JOptionPane.WARNING_MESSAGE);
		}
	}

	private void botao4MouseClicked(MouseEvent evt)
	{

		final gerarGraficoSistema grafico = new gerarGraficoSistema(consultasAtivas);

		grafico.pack();
		RefineryUtilities.centerFrameOnScreen(grafico);
		grafico.setVisible(true);

	}

}
